package main

var a []int

func f(b []int) []int {
	a = b[:2]
	return a
}

func main() {

}

// 上面的代码有内存泄露的问题
// type SliceHeader {
//     Data uintptr
//     Len  int
//     Cap  int
// }
// Data 是一个指向所引用的数组的指针地址
// 从上面的程序来看，a 截取了 b 的一部分，但是 a 和 b 实际上是共享着同一个底层数组
// 虽然切片 b 在函数结束时，就不再被使用了，但是切片 a 和 b 引用的同一块底层数组还被引用着，
// 而且 a 只使用了底层数组的 0 和 1 索引位，但是底层数组的其余空间，也不会被 GC，因此造成了内存泄露。
//
//
// 解决办法
// 可以利用切片的特性，当切片容量不足时，会重新申请一个新的底层数组来存储。
